/*
 * DisplayItemManager.java
 * business
 *
 * Created by SunDing on 2016/9/9.
 *
 * Copyright (c) 2016年 yidiandao. All rights reserved.
 */

package com.yidiandao.business.ui.widget.listview;

import android.support.v4.util.ArrayMap;

import java.security.InvalidParameterException;
import java.util.Map;

/**
 * 当前项目中所有的Adapter中所有类型DisplayItem的Manager
 */
@Deprecated
public class DisplayItemManager {

    /**
     * 全局唯一的存储所有Adapter的DisplayItem的集合
     */
    private static Map<String, Map<String, Integer>> mGlobalDisplayItemMap;

    /**
     * 注册当前Adapter的所有的DisplayListItem
     *
     * @param adapterTag  不同ListView的Adapter的tag
     * @param displayItem 当前tag(ListView的Adapter)中需要展示的DisplayListItem
     */
    public static void register(String adapterTag, Class<? extends DisplayListItem> displayItem) {
        if (mGlobalDisplayItemMap == null) {
            // 全局唯一,存储所有的Adapter的DisplayListItem
            mGlobalDisplayItemMap = new ArrayMap<>();
        }

        // 获取单个Adapter的管理DisplayListItem的集合 不存在就创建后存入
        if (mGlobalDisplayItemMap.containsKey(adapterTag)) {
            // adapterViewTypeMap ---> 单个Adapter
            // key      displayItem.getSimpleName()
            // value    displayItem对应的type(int)
            Map<String, Integer> adapterViewTypeMap = mGlobalDisplayItemMap.get(adapterTag);

            if (!adapterViewTypeMap.containsKey(displayItem.getSimpleName())) {
                // 不包含当前的Type --> 存入集合(clazzName,type总的类型数量，同时，又包含当前Item所对应的type)
                // adapterViewTypeMap 的长度随着 存入的displayListItem 的数量变化
                adapterViewTypeMap.put(displayItem.getSimpleName(), adapterViewTypeMap.size());
            }
        } else {
            Map<String, Integer> viewTypeMap = new ArrayMap<>();
            viewTypeMap.put(displayItem.getSimpleName(), viewTypeMap.size());
            mGlobalDisplayItemMap.put(adapterTag, viewTypeMap);
        }
    }

    /**
     * 获取当前Adapter的Item的Type
     *
     * @param displayItemClass 当前类型的DisplayItem
     * @param adapterTag       当前Adapter在集合中的key
     */
    public static int getItemViewType(
            Class<? extends DisplayListItem> displayItemClass, String adapterTag) {
        if (mGlobalDisplayItemMap != null && mGlobalDisplayItemMap.containsKey(adapterTag)) {
            Map<String, Integer> adapterViewTypeMap = mGlobalDisplayItemMap.get(adapterTag);
            // adapterViewTypeMap
            // key      displayItem.getSimpleName()
            // value    displayItem对应的type(int)
            if (adapterViewTypeMap.containsKey(displayItemClass.getSimpleName())) {
                return adapterViewTypeMap.get(displayItemClass.getSimpleName());
            } else {
                throw new InvalidParameterException(
                        "Please call method : DisplayItemManager.register() to register displayItem : " + displayItemClass.getSimpleName() + " to " + adapterTag);
            }
        } else {
            // itemType默认从0开始
            return 0;
        }
    }

    /**
     * 返回当前Adapter的总的Type数量
     *
     * @param adapterTag 当前Adapter在集合中的key
     */
    public static int getViewTypeCount(String adapterTag) {
        Map adapterViewTypeMap = mGlobalDisplayItemMap.get(adapterTag);

        if (adapterViewTypeMap != null) {
            return adapterViewTypeMap.size();
        } else {
            // 默认只有一种类型
            return 1;
        }
    }
}
